import csv
import io

def preprocess_csv(file_path):
    """
    预处理CSV文件，自动识别并移除头部无关信息
    返回处理后的CSV内容作为文件对象
    """
    csv_header=['订单编号','支付订单号','交易号','交易编号',"币种", '货币单位', '订单总价']
    try:
        # 读取原始文件内容
        with open(file_path, 'r', encoding='utf-8') as f:
          content = f.readlines()
          # 查找真正的CSV头部行
          header_row = 0
          for i, line in enumerate(content[:9]):
              # 检查是否是有效的CSV头部行
              if any(str(header) in line for header in csv_header):
                  header_row = i
                  break

          # 提取有效内容（头部及之后的行）
          valid_content = content[header_row:]
          # print(valid_content[:3])
          # 创建内存文件对象
          # csv_file = io.StringIO(''.join(valid_content))
          return valid_content
    
    except Exception as e:
        print(f"预处理CSV文件 {file_path} 时出错: {e}")
        # 如果预处理失败，返回原始文件路径
        return None

def get_csv_data(file_path):
    """
    读取CSV文件数据
    优化版本：能够处理包含头部无关信息的CSV文件
    """
    from excel_merger import determine_channel
    
    results = []
    try:
        # 预处理CSV文件
        csv_file = preprocess_csv(file_path)
        
        # 确定频道
        channel = determine_channel(file_path)
        
        if csv_file:
            # 使用预处理后的文件对象
            csv_reader = csv.DictReader(csv_file)
            print(csv_reader)
            for row in csv_reader:
                row_with_source = row.copy()
                row_with_source['来源'] = channel
                results.append(row_with_source)
            print(f"CSV 读取完成，结果：{len(results)} 行")
        else:
            # 预处理失败，尝试直接读取
            with open(file_path, 'r', encoding='utf-8') as csvfile:
                csv_reader = csv.DictReader(csvfile)
                for row in csv_reader:
                    row_with_source = row.copy()
                    row_with_source['来源'] = channel
                    results.append(row_with_source)
            print(f"CSV 直接读取完成，结果：{len(results)} 行")
            
        return results
    except Exception as e:
        print(f"读取错误: {e}")
        return []

# 测试函数
def test_csv_reading(file_path):
    """
    测试CSV读取功能
    """
    print(f"测试读取文件: {file_path}")
    data = get_csv_data(file_path)
    print(f"成功读取 {len(data)} 条记录")
    if data and len(data) > 0:
        print("第一条记录示例:")
        print(list(data[0].keys())[:5])  # 只显示前5个键
    
    return data

# 如果直接运行此脚本，执行测试
if __name__ == "__main__":
    # 可以在这里添加测试代码
    import sys
    if len(sys.argv) > 1:
        test_file = sys.argv[1]
        test_csv_reading(test_file)
    else:
        print("请提供CSV文件路径作为参数")